// stores/user.js
import { defineStore } from 'pinia'
import { ref } from 'vue'
import { userGetInfoService } from '@/api/user'

export const useUserStore = defineStore(
  'big-user',
  () => {
    const token = ref('')
    const setToken = (newToken) => {
      token.value = newToken
    }
    const removeToken = () => {
      token.value = ''
    }

    const user = ref({})
    const getUser = async () => {
  try {
    if (!token.value) {
      throw new Error('未找到token，无法获取用户信息')
    }
    
    // 添加请求超时和重试机制
    const res = await userGetInfoService()
    
    if (res.data.code === '0000') {
      user.value = res.data.data
      return res.data.data
    } else {
      throw new Error(res.data.msg || '获取用户信息失败')
    }
  } catch (error) {
    console.error('获取用户信息失败:', error)
    // 清除无效 token
    removeToken()
    throw error
  }
}
    
    const setUser = (obj) => {
      user.value = obj
    }

    // 添加一个初始化方法，用于应用启动时恢复用户状态
    const initUser = async () => {
      if (token.value) {
        try {
          await getUser()
        } catch (error) {
          // 如果 token 失效，清除本地存储
          removeToken()
        }
      }
    }

    return {
      token,
      setToken,
      removeToken,
      user,
      getUser,
      setUser,
      initUser
    }
  },
  {
    persist: {
      key: 'user-store',
      paths: ['token'], // 确保 token 被持久化
      storage: localStorage, // 明确指定存储方式
    }
  }
)